package model;

import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;


/**
 * The persistent class for the PROFORMA database table.
 * 
 */
@Entity
@Table(name="PROFORMA")
@NamedQuery(name="Proforma.findAll", query="SELECT p FROM Proforma p")
public class Proforma implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(name="PROFORMA_PROFORMAID_GENERATOR" )
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PROFORMA_PROFORMAID_GENERATOR")
	@Column(name="PROFORMA_ID", unique=true, nullable=false)
	private long proformaId;

	@Column(nullable=false, length=60)
	private String descripcion;

	@Column(name="DESCRIPCION_2", length=60)
	private String descripcion2;

	@Column(nullable=false)
	private BigDecimal descuento;

	@Temporal(TemporalType.DATE)
	@Column(name="FECHA_EMISION", nullable=false)
	private Date fechaEmision;

	@Column(nullable=false)
	private BigDecimal iva;

	@Column(length=1000)
	private String observaciones;

	@Column(nullable=false)
	private BigDecimal subtotal;

	@Column(nullable=false)
	private BigDecimal total;

	//bi-directional many-to-one association to Cliente
	@ManyToOne
	@JoinColumn(name="CLIENTE_ID", nullable=false)
	private Cliente cliente;

	//bi-directional many-to-one association to Empleado
	@ManyToOne
	@JoinColumn(name="EMPLEADO_ID", nullable=false)
	private Empleado empleado;

	//bi-directional many-to-one association to FormaPago
	@ManyToOne
	@JoinColumn(name="FORMA_PAGO_ID", nullable=false)
	private FormaPago formaPago;

	//bi-directional many-to-one association to TipoProforma
	@ManyToOne
	@JoinColumn(name="TIPO_PROFORMA_ID", nullable=false)
	private TipoProforma tipoProforma;

	//bi-directional many-to-one association to ProformaDetalle
	@OneToMany(mappedBy="proforma")
	private List<ProformaDetalle> proformaDetalles;

	public Proforma() {
	}

	public long getProformaId() {
		return this.proformaId;
	}

	public void setProformaId(long proformaId) {
		this.proformaId = proformaId;
	}

	public String getDescripcion() {
		return this.descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String getDescripcion2() {
		return this.descripcion2;
	}

	public void setDescripcion2(String descripcion2) {
		this.descripcion2 = descripcion2;
	}

	public BigDecimal getDescuento() {
		return this.descuento;
	}

	public void setDescuento(BigDecimal descuento) {
		this.descuento = descuento;
	}

	public Date getFechaEmision() {
		return this.fechaEmision;
	}

	public void setFechaEmision(Date fechaEmision) {
		this.fechaEmision = fechaEmision;
	}

	public BigDecimal getIva() {
		return this.iva;
	}

	public void setIva(BigDecimal iva) {
		this.iva = iva;
	}

	public String getObservaciones() {
		return this.observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	public BigDecimal getSubtotal() {
		return this.subtotal;
	}

	public void setSubtotal(BigDecimal subtotal) {
		this.subtotal = subtotal;
	}

	public BigDecimal getTotal() {
		return this.total;
	}

	public void setTotal(BigDecimal total) {
		this.total = total;
	}

	public Cliente getCliente() {
		return this.cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public Empleado getEmpleado() {
		return this.empleado;
	}

	public void setEmpleado(Empleado empleado) {
		this.empleado = empleado;
	}

	public FormaPago getFormaPago() {
		return this.formaPago;
	}

	public void setFormaPago(FormaPago formaPago) {
		this.formaPago = formaPago;
	}

	public TipoProforma getTipoProforma() {
		return this.tipoProforma;
	}

	public void setTipoProforma(TipoProforma tipoProforma) {
		this.tipoProforma = tipoProforma;
	}

	public List<ProformaDetalle> getProformaDetalles() {
		return this.proformaDetalles;
	}

	public void setProformaDetalles(List<ProformaDetalle> proformaDetalles) {
		this.proformaDetalles = proformaDetalles;
	}

	public ProformaDetalle addProformaDetalle(ProformaDetalle proformaDetalle) {
		getProformaDetalles().add(proformaDetalle);
		proformaDetalle.setProforma(this);

		return proformaDetalle;
	}

	public ProformaDetalle removeProformaDetalle(ProformaDetalle proformaDetalle) {
		getProformaDetalles().remove(proformaDetalle);
		proformaDetalle.setProforma(null);

		return proformaDetalle;
	}

}